package main

import (
	"bluebell/controller"
	"bluebell/dao/mysql"
	"bluebell/logger"
	"bluebell/pkg/snowflake"
	"bluebell/router"
	"bluebell/settings"
	"flag"
	"fmt"
	"go.uber.org/zap"
)

// @title 管理后台接口文档
// @version 1.0.0
// @description 管理后台相关接口
// @termsOfService http://swagger.io/terms/

// @contact.name 何叨叨
// @contact.url http://heyingjiee.github.io
// @contact.email 1270433876@qq.com

// @host localhost:8686
// @BasePath /api/v1
func main() {
	//读取参数,根据参数加载对应配置文件
	var configFile string
	flag.StringVar(&configFile, "config", "conf/dev.yaml", "指定启动项目读取的配置文件位置")
	flag.Parse()
	//加载配置文件
	if err := settings.Init(configFile); err != nil {
		fmt.Printf("加载文件出错，err:%v\n", err)
	}

	//初始化日志
	if err := logger.Init(settings.Config.LogConfig, settings.Config.Mode); err != nil {
		fmt.Printf("初始化日志出错，err:%v\n", err)
	}

	defer zap.L().Sync()

	//初始化MySQL
	if err := mysql.InitDatabase(settings.Config.MysqlConfig); err != nil {
		fmt.Printf("初始化数据库出错，err:%v\n", err)
	}
	mysql.AutoMigrate()
	defer mysql.CloseLinkedDatabase()
	//初始化Redis(暂时略)

	//初始化分布式Id生成器
	if err := snowflake.Init("2022-07-14", 1); err != nil {
		fmt.Printf("初始化分布式Id生成器出错, err:%v\n", err)
		return
	}

	//替换gin框架的Validator引擎
	if err := controller.InitTrans("zh"); err != nil {
		fmt.Printf("初始化gin翻译器失败，err：%v\n", err)
		return
	}
	//注册gin框架路由
	r := router.SetupRouter(settings.Config.Mode)

	//6、启动Gin框架
	r.Run(fmt.Sprintf(":%s", settings.Config.Port))

	//6、启动服务（优雅关机）
}
